﻿using System;
using System.ComponentModel;
using System.IO;
using System.Text;

namespace OwElectrePromethee
{
    public enum EPorównanie
    {
        [Description("Wariant preferowany nad profil")]
        Preferowany = 1,

        [Description("Wariant gorszy od profilu")]
        Gorszy = 2,

        [Description("Wariant nierozróżnialny z profilem")]
        Nierozróżnialny = 3,

        [Description("Wariant nie porównywalny z profilem")]
        Nieporównywalny = 4,
    }

    public enum EPrzewyższanie
    {
        [Description("xSy")]
        SS = 1,

        [Description("!xSy")]
        _S = 2,

        vS = 3,

        [Description("x?y")]
        _1 = 4
    }

    public static class EPorównanieHelper
    {
        [Description("Czy preferowany (xSy)")]
        public static bool CzyPreferowany(ERelacje relacja)
        {
            if (relacja == ERelacje.Nierozroznialne || relacja == ERelacje.SlabaPreferencjaW_P || relacja == ERelacje.SilnaPreferencjaW_P)
                return true;
            else return false;
        }

        [Description("Rysowanie tabeli porównań")]
        public static string Rysuj(EPrzewyższanie[,] compliance)
        {
            var ret = new StringBuilder();
            using (TextWriter writer = new StreamWriter("Comparitions.txt"))
            {
                for (int wariantId = 0; wariantId < compliance.GetLength(0); wariantId++)
                {
                    writer.Write("wariant {0:00};", wariantId + 1);
                    ret.AppendFormat("wariant {0:00}: ", wariantId + 1);
                    for (int profilId = 0; profilId < compliance.GetLength(1); profilId++)
                    {
                        writer.Write("{0};", compliance[wariantId, profilId]);
                        ret.AppendFormat("{0} ", compliance[wariantId, profilId]);
                    }
                    writer.WriteLine();
                    ret.AppendLine();
                }
            }
            return ret.ToString();
        }


        [Description("Wyszukiwanie klasy")]
        public static string WypiszKlasy(EPrzewyższanie[,] compliance)
        {
            var ret = new StringBuilder();

            for (int wariantId = 0; wariantId < compliance.GetLength(0); wariantId++ )
            {
                ret.AppendFormat("warian {0:00}: ", wariantId + 1);

                for (int profilId = 0; profilId < compliance.GetLength(1); profilId++ )
                {
                    if(compliance[wariantId,profilId] == EPrzewyższanie._S)
                    {
                        ret.Append(profilId + " ");
                        break;
                    }
                }

                for (int profilId = compliance.GetLength(1) - 1; profilId >= 0; profilId--)
                {
                    if (compliance[wariantId, profilId] == EPrzewyższanie.SS)
                    {
                        ret.Append(profilId + 1);
                        break;
                    }
                }

                    ret.AppendLine();
            }

                return ret.ToString();
        }
    }
}
